package com.wnx.job.modules.mini.controller;

import cn.hutool.core.collection.CollUtil;
import com.wnx.job.common.api.Const;
import com.wnx.job.common.api.ResultData;
import com.wnx.job.modules.jms.dto.CompanyParam;
import com.wnx.job.modules.jms.dto.PostParam;
import com.wnx.job.modules.jms.service.JmsCompanyService;
import com.wnx.job.modules.jms.service.JmsPostService;
import com.wnx.job.modules.mini.dto.PostMiniParam;
import com.wnx.job.modules.pms.model.PmsAdvantage;
import com.wnx.job.modules.pms.model.PmsTag;
import com.wnx.job.modules.pms.service.PmsAdvantageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@RestController
@RequestMapping("/mini/post")
public class PostMiniController {

    @Autowired
    private JmsPostService postService;
    @Autowired
    private JmsCompanyService companyService;
    @Autowired
    private PmsAdvantageService advantageService;

    /**
     * 获取全部职位信息
     */
    @GetMapping("/findAll")
    public ResultData<List<PostMiniParam>> finAll(){
        log.info("【=============(微信小程序)系统正在获取职位信息=======】");
        //调用服务层，查询全部职位信息
        List<PostMiniParam>  postList =  postService.finMiniAll();

        //查询职位对应标签注入
        postList.forEach(post->{
            List<PmsTag> tagList = postService.findTagListByPostId(post.getId());
            List<String> collect = tagList.stream()
                    .map(PmsTag::getName)
                    .sorted(Comparator.comparing(String::length))
                    .collect(Collectors.toList());

            String tags = CollUtil.join(collect, " || ");
            post.setTags(tags);
        });

        log.info("【=============(微信小程序)系统获取职位信息成功！！！=======】");
        //返回结果对象
        return ResultData.success(Const.QUERY_POST_SUCCESS,postList);


    }

    /**
     * 获取热门招聘信息
     */
    @GetMapping("/findHostPostList")
    public ResultData<List<PostMiniParam>> findHostPostList(){
        log.info("【=============(微信小程序)系统正在获取热门职位信息=======】");
        //调用服务层，查询热门职位信息
        List<PostMiniParam>  postList =  postService.findHostPostList();


        //查询职位对应标签注入
        postList.forEach(post->{
            List<PmsTag> tagList = postService.findTagListByPostId(post.getId());

            List<String> collect = tagList.stream()
                    .map(PmsTag::getName)
                    .sorted(Comparator.comparing(String::length))
                    .collect(Collectors.toList());

            String tags = CollUtil.join(collect, " || ");

            post.setTags(tags);
        });


        log.info("【=============(微信小程序)系统获取热门职位信息成功！！！=======】");
        //返回结果对象
        return ResultData.success(Const.QUERY_POST_SUCCESS,postList);


    }


    /**
     * 根据ID获取职位信息
     * @return
     */
    @GetMapping("/findById/{id}")
    public ResultData<Map<String,Object>> findById(@PathVariable(name = "id")Long id){
        log.info("【=============(微信小程序)系统正在根据职位ID获取职位和公司详情=======】");
        //获取前端传入的职位ID

        //调用服务根据ID查询职位信息
        PostParam post = postService.findById(id);

        //调用服务根据公司ID查询公司详情以及公司所有职位
        CompanyParam company = companyService.findDetailById(post.getCompanyId());

        //调用服务根据公司ID查询公司优势
        List<PmsAdvantage> advantageList = advantageService.findAdvantageListByCompanyId(post.getCompanyId());
        company.setAdvantageList(advantageList);

        //构造结果Map返回
        Map<String, Object> resultMap = new HashMap<>();

        resultMap.put("post",post);
        resultMap.put("company",company);
        log.info("【=============(微信小程序)系统正在根据职位ID获取职位和公司详情成功！！！=======】");
        //封装结果集对象返回
        return ResultData.success(Const.QUERY_POST_SUCCESS,resultMap);

    }
}
